/*--------------------------------------------------------------------
模块名称: 双向全双工UART驱动模块
模块作者：陈首敏
编制时间: 2021-12-30
功能描述: 收发同时进行,发送buf一边发一边清零,接收多少个清除多少个
版本号: 		 V2.0
---------------------------------------------------------------------*/

#ifndef UART_DRV_H
#define UART_DRV_H

#ifdef	EXTR
#undef	EXTR                                                                        
#endif
						                                                                                         
#ifdef	UART_DRV_C
#define EXTR           
//只对内部有效
#define RXD_BUF_LENGTH		        (200)           // 接收字总长度
#define TXD_BUF_LENGTH		        (400)           // 发送字总长度

#define UART_SEND_DELAY_TIME	    (5)            // 最短发送间隔时间 单位:10ms
#define UART_DECODE_DELAY_TIME	    (4)            // 解码延迟时间 单位:10ms

#define	FULL_DUPLEX					(0)		        // 全双工通信模式
#define	HALF_DUPLEX					(1)	            // 半双工通信模式
#define	DUPLEX_MODE					(FULL_DUPLEX)   // 选择工通信模式

/* 收发中断操作 */
#define EN_RXD_INT()		        {;}             // 打开接收中断
#define DIS_RXD_INT()		        {;}             // 关闭接收中断
#define EN_TXD_INT()		        {;}             // 打开发送中断
#define DIS_TXD_INT()		        {;}             // 关闭发送中断

#define UART_SendByte(x)			{UART2->TDR_b.TXBUF = (x);} // 发送暂存寄存器赋值

#else			
// 只对外部有效			                                                                                         
#define EXTR	extern                                                                                               
#endif 


typedef void (*pDecodeFunc)(unsigned char *pBuf,unsigned char Length);
typedef unsigned short (*pEncodeFunc)(unsigned char *pBuf);

EXTR void UartDrvInit(void);                                        // 串口初始化
EXTR void UartDrvProc(pDecodeFunc pRecFunc,pEncodeFunc pSendFunc);  // 串口主函数，在主循环调用
EXTR void IRQ_REC(unsigned char temp);                              // 串口接收中断函数
EXTR void IRQ_TXD(void);                                            // 串口发送中断函数


#endif

